
/**
 * 1、方法的重载
 *      同一个类中存在多个同名不同参的方法时，它们之间构成重载 ( 重载是相互的 )
 *      所谓同名是指 方法名称完全相同
 *      所谓不同参是指 构成重载的多个方法的 参数类型 、参数个数 、参数类型顺序 不相同 ( 只要有其中一项不相同即可 )
 *      重载 对 方法的 修饰符、返回类型、异常列表 等没有要求
 *
 */
public class SikaDeer {

    public int add( int a , int b ) {
        System.out.println( "add( int , int )" );
        return a + b ;
    }

    protected double add( int a , double b ) {
        System.out.println( "add( int , double )" );
        return a + b ;
    }

    // 没有 显式 指定 访问修饰符 时即为 默认 ( 默认是 package-private )
    double add( double a , int b ) {
        System.out.println( "add( double , int )" );
        return a + b ;
    }

    private double add( double a , double b ) {
        System.out.println( "add( double , double )" );
        return a + b ;
    }

    public double add( double a , double b , double c ) {
        System.out.println( "add( double , double , double )" );
        return a + b + c ;
    }

    public static void main( String[] args ) {

        SikaDeer s = new SikaDeer();

        int x = s.add( 100 , 200 ); // add( int , int )
        System.out.println( x );

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        double y = s.add( 100D , 200.0 );  // add( double , double )
        System.out.println( y );

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        double z = s.add( 100 , 200.0 );  // add( int , double )
        System.out.println( z );

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        double u = s.add( 100.0 , 200 );  // add( double , int )
        System.out.println( u );

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        double v = s.add( 100 , 200 , 300 );  // add( double , double , double )
        System.out.println( v );

    }

}
